From 3294557717b3b5b1d424b3a946b1c81abf09996e Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Tue, 28 Jul 2020 13:27:50 +0100 Subject: [PATCH] a11y: Update the valuetext attribute of GtkProgressBar Since progress bars can have a label, we should propagate that information to ATs whenever it's set. --- gtk/gtkprogressbar.c | 18 +++++++++++++++--- testsuite/a11y/progressbar.c | 3 +++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c index 08c58ebc50..0b31b893ff 100644 --- a/gtk/gtkprogressbar.c +++ b/gtk/gtkprogressbar.c @@ -739,16 +739,16 @@ void gtk_progress_bar_set_fraction (GtkProgressBar *pbar, double fraction) { + char *text = NULL; + g_return_if_fail (GTK_IS_PROGRESS_BAR (pbar)); pbar->fraction = CLAMP (fraction, 0.0, 1.0); if (pbar->label) { - char *text = get_current_text (pbar); + text = get_current_text (pbar); gtk_label_set_label (GTK_LABEL (pbar->label), text); - - g_free (text); } gtk_progress_bar_set_activity_mode (pbar, FALSE); @@ -761,6 +761,18 @@ gtk_progress_bar_set_fraction (GtkProgressBar *pbar, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, fraction, -1); + if (text != NULL) + { + gtk_accessible_update_property (GTK_ACCESSIBLE (pbar), + GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, text, + -1); + } + else + { + gtk_accessible_reset_property (GTK_ACCESSIBLE (pbar), GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT); + } + + g_free (text); g_object_notify_by_pspec (G_OBJECT (pbar), progress_props[PROP_FRACTION]); } diff --git a/testsuite/a11y/progressbar.c b/testsuite/a11y/progressbar.c index 97f5ef82e7..ea6adb16d8 100644 --- a/testsuite/a11y/progressbar.c +++ b/testsuite/a11y/progressbar.c @@ -35,12 +35,15 @@ progress_bar_properties (void) gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, 1.); gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, 0.); gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, 0.); + gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, NULL); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), 0.5); gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, 1.); gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, 0.); gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, 0.5); + gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, NULL); + g_assert_false (gtk_test_accessible_has_property (GTK_ACCESSIBLE (widget), GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT)); g_object_unref (widget); } -- 2.30.2